<?php

/**
 * Фильтр проверки подлинности данных, пришедших от PayPal.
 *
 */
class Paypal_Filter_Verify extends Kernel_Filter
{
    /**
     * Запускает фильтр.
     *
     */
    public function process()
    {
        if (!$this->_verify())
        {
            $this->_abort('Invalid request params');
        }
    }

    /**
     * Проверяет подлинность данных запроса.
     *
     * @return  boolean
     */
    private function _verify()
    {
        $post = array();

        // составляем набор данных для отправки на проверку
        foreach (array_merge($_POST, array('cmd' => '_notify-validate')) as $param => $value)
        {
            // экранируем спецсимволы в значениях
            $post[] = $param . '=' . urlencode($value);
        }

        $curl = curl_init(Kernel_Config::get('paypal', 'url'));

        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, implode('&', $post));
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);

        $response = curl_exec($curl);
        curl_close($curl);

        return 'VERIFIED' == $response;
    }
}
